package weibo.database;

import java.sql.*;
import java.util.*;

import weibo.model.TweetMod;

public class TweetDB {
	private Connection conn=null;
	
	/*
	 * 获取连接
	 */
	public TweetDB(){
		ConnectionTools db=new ConnectionTools();
		conn=db.getConn();
	}
	
	/*
	 * 查询该用户推文数量
	 */
	public int SelectTweetUserCount(int userid){
		String sql="select COUNT(tweet_userid) as total  from tweet where tweet_userid=?";
		try {
			java.sql.PreparedStatement exec=conn.prepareStatement(sql);
			exec.setInt(1,userid);
			ResultSet res=exec.executeQuery();
			res.next();
			return res.getInt("total");
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			return -1;
		}
	}
	
	/*
	 * 创建推文
	 */
	public boolean CreateTweet(TweetMod tweet){
		String sql="insert into tweet (tweet_userid,tweet_text,tweet_image1,tweet_image2,tweet_image3,tweet_createdate) values"
				+ "(?,?,?,?,?,NOW())";
		try {
			java.sql.PreparedStatement exec=conn.prepareStatement(sql);
			exec.setInt(1,tweet.getUserid());
			exec.setString(2, tweet.getText());
			exec.setString(3, tweet.getImage1());
			exec.setString(4, tweet.getImage2());
			exec.setString(5, tweet.getImage3());
			int result=exec.executeUpdate();
			if (result>1 || result==0){
				conn.close();
				return false;
			}
			conn.close();
			return true;
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			return false;
		}
	}
	
	/*
	 * 查询tween_id号以前的推文
	 * @param tween_id号,长度
	 */
	public List<TweetMod> QueryAllTweent(int tweet_id,int len){
		List<TweetMod> tweet=new ArrayList<TweetMod>();
		String sql="select tweet.*,user.user_head,user.user_name from tweet,user where tweet.tweet_id<? and tweet.tweet_userid=user.userid  order by tweet.tweet_id DESC LIMIT 0,?";
		try {
			java.sql.PreparedStatement exec=conn.prepareStatement(sql);
			exec.setInt(1, tweet_id);
			exec.setInt(2, len);
			ResultSet res=exec.executeQuery();
			while(res.next()){
				tweet.add(new TweetMod(
						res.getInt("tweet_id"),
						res.getInt("tweet_userid"),
						res.getString("tweet_text"),
						res.getString("tweet_image1"),
						res.getString("tweet_image2"),
						res.getString("tweet_image3"),
						res.getDate("tweet_createdate").toString()+" "+res.getTime("tweet_createdate").toString(),
						res.getString("user_head"),
						res.getString("user_name")));
			}
			conn.close();
			return tweet;
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			return null;
		}
		
	}
	
	/*
	 * 最新十条
	 */
	
	public List<TweetMod> QuesyNewTweet(){
		List<TweetMod> tweet=new ArrayList<TweetMod>();
		String sql="select tweet.*,user.user_head,user.user_name,(SELECT COUNT(up_or_down.uod_type) FROM up_or_down WHERE up_or_down.uod_tweetid=tweet.tweet_id AND up_or_down.uod_type=1) as up,(SELECT COUNT(up_or_down.uod_type) FROM up_or_down WHERE up_or_down.uod_tweetid=tweet.tweet_id AND up_or_down.uod_type=0) as down from tweet,user where tweet.tweet_userid=user.userid order by tweet_id DESC LIMIT 0,10";
		try {
			java.sql.PreparedStatement exec=conn.prepareStatement(sql);
			ResultSet res=exec.executeQuery();
			while(res.next()){
				tweet.add(new TweetMod(
						res.getInt("tweet_id"),
						res.getInt("tweet_userid"),
						res.getString("tweet_text"),
						res.getString("tweet_image1"),
						res.getString("tweet_image2"),
						res.getString("tweet_image3"),
						res.getDate("tweet_createdate").toString()+" "+res.getTime("tweet_createdate").toString(),
						res.getString("user_head"),
						res.getString("user_name"),
						res.getInt("up"),
						res.getInt("down")));
			}
			conn.close();
			return tweet;
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			return null;
		}
		
	}
	/*
	 * 总推文数
	 * 
	 */
	public int QueryTweetCount(){
		String sql="select COUNT(tweet_userid) as total  from tweet";
		try {
			java.sql.PreparedStatement exec=conn.prepareStatement(sql);
			ResultSet res=exec.executeQuery();
			res.next();
			conn.close();
			return res.getInt("total");
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			return -1;
		}
	}
	/*
	 * 指定推文
	 */
	
	public List<TweetMod> QueryTweet(int tweetid){
		List<TweetMod> tweet=new ArrayList<TweetMod>();
		String sql="select tweet.*,user.user_head,user.user_name,(SELECT COUNT(up_or_down.uod_type) FROM up_or_down WHERE up_or_down.uod_tweetid=tweet.tweet_id AND up_or_down.uod_type=1) as up,(SELECT COUNT(up_or_down.uod_type) FROM up_or_down WHERE up_or_down.uod_tweetid=tweet.tweet_id AND up_or_down.uod_type=0) as down from tweet,user where tweet.tweet_userid=user.userid and tweet_id=?";
		try {
			java.sql.PreparedStatement exec=conn.prepareStatement(sql);
			exec.setInt(1, tweetid);
			ResultSet res=exec.executeQuery();
			while(res.next()){
				tweet.add(new TweetMod(
						res.getInt("tweet_id"),
						res.getInt("tweet_userid"),
						res.getString("tweet_text"),
						res.getString("tweet_image1"),
						res.getString("tweet_image2"),
						res.getString("tweet_image3"),
						res.getDate("tweet_createdate").toString()+" "+res.getTime("tweet_createdate").toString(),
						res.getString("user_head"),
						res.getString("user_name"),
						res.getInt("up"),
						res.getInt("down")));
			}
			conn.close();
			return tweet;
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			return null;
		}
		
	}
	/*
	 * 删除推文
	 * @param userid
	 * @return boolean
	 * 
	 */
	public boolean DeleteTweet(int tweetid){
		String sql="DELETE FROM tweet WHERE tweet_id=?";
		try {
			PreparedStatement exec=conn.prepareStatement(sql);
			exec.setInt(1,tweetid);
			int result=exec.executeUpdate();
			if (result==1){
				conn.close();
				return true;
			}else if (result>1){
				conn.rollback();
				//此次操作出现多个更改，可能是SQL注入，所以发现就回滚操作。
				conn.close();
				return false;
			}else{
				conn.close();
				return false;
			}
			
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			return false;
		}
	}
	
}
